package Day007_Collection_泛型_数据结构.Demo02_Iterator迭代器;

/*
    迭代器常见问题:
                问题一: 如果集合中已经没有元素了，还继续使用迭代器的next方法，
                       将会抛出java.util.NoSuchElementException没有集合元素异常
                    解决方式:重新获取迭代器

                问题二: 在进行集合元素获取时，如果添加或移除集合中的元素,将无法继续迭代,
                       将会抛出ConcurrentModificationException并发修改异常
                    解决方式:移除元素,使用迭代器进行移除,不要使用集合对象移除

 */

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

public class 迭代常见问题 {
    public static void main(String[] args) {

        //创建集合
        Collection<String> coll = new ArrayList<>(); //多态  编译看父类,coll父类没有索引,没有索引对象方法
        coll.add("范冰冰");
        coll.add("李冰冰");
        coll.add("赵薇");
        coll.add("林心如");
        //迭代
        //获取迭代器接口
        Iterator<String> it = coll.iterator();
        //循环
        //while(it.hasNext()){
        //    String s = it.next();
        //    System.out.print(s + " "); //范冰冰 李冰冰 赵薇 林心如
        //}

        //问题:
        // 1. 如果集合中已经没有元素了，还继续使用迭代器的next方法，将会抛出java.util.NoSuchElementException没有集合元素异常
        // 解决方式:
        // 重新获取迭代器
        Iterator<String> it2 = coll.iterator();
        // String s1 = it.next(); //报错
        // System.out.println(s1);

        // 2. 在进行集合元素获取时，如果添加或移除集合中的元素,将无法继续迭代,将会抛出ConcurrentModificationException并发修改异常
        //解决方式:
        //移除元素:使用迭代器进行移除,不要使用集合对象移除
        //增加元素:ListIterator
        //使用Iterator接口的remove方法
        while (it.hasNext()) {
            String s = it.next();
            if (s.equals("范冰冰")) {
                it.remove(); //迭代器移除
            }
        }
        System.out.println(coll);

            /*if (s.equals("范冰冰")){
                coll.remove(s); //删除 增加都不行
            }*/

    }
}
